using AiQiuQuan.Sport.Model.Models;
using AiQiuQuan.Sport.Core;

namespace AiQiuQuan.Sport.WebApi.Services
{
    /// <summary>
    /// 教练管理
    /// </summary>
    public interface ICoacherService : ITransientDependency
    {
        /// <summary>
        /// 查询
        /// </summary>
        Task<CoacherDto> GetAsync(Guid id, bool isPlatform = false);

        /// <summary>
        /// 查询
        /// </summary>
        Task<CoacherDto> QueryAsync();

        /// <summary>
        /// 分页请求
        /// </summary>
        Task<PageResult<CoacherDto>> PageListAsync(CoacherPageRequestDto request);

        /// <summary>
        /// 平台分页请求
        /// </summary>
        Task<PageResult<CoacherDto>> QueryPageListAsync(CoacherRequestDto request);

        /// <summary>
        /// 新增
        /// </summary>
        Task<UnaryResult> AddAsync(CoacherAddDto model);

        /// <summary>
        /// 添加场馆
        /// </summary>
        Task<UnaryResult> AddVenueAsync(CoacherVenueAddDto request);

        /// <summary>
        /// 教练场馆列表
        /// </summary>
        /// <param name="coacherUserId">教练用户ID</param>
        Task<List<CoacherVenueDto>> GetCoacherVenueListAsync(Guid coacherUserId);

        /// <summary>
        /// 更新教练场馆
        /// </summary>
        Task<UnaryResult> UpdateVenueAsync(CoacherVenueUpdateDto request);

        /// <summary>
        /// 删除场馆
        /// </summary>
        Task<UnaryResult> DeleteVenueAsync(Guid venueId);

        /// <summary>
        /// 添加学员
        /// </summary>
        Task<UnaryResult> AddStudentAsync(CoacherStudentAddDto request);

        /// <summary>
        /// 私教学生更新
        /// </summary>
        Task<UnaryResult> UpdateStudentAsync(CoacherStudentUpdateDto request);

        /// <summary>
        /// 修改
        /// </summary>
        Task<UnaryResult> UpdateAsync(CoacherUpdateDto model);

        /// <summary>
        /// 修改图片、介绍
        /// </summary>
        Task<UnaryResult> UpdateSimpleAsync(CoacherSimpleUpdateDto model);

        /// <summary>
        /// 删除
        /// </summary>
        Task<UnaryResult> DeleteAsync(Guid id);

        /// <summary>
        /// 教练评星
        /// </summary>
        Task<UnaryResult> AddStarAsync(CoacherStarAddDto request);

        /// <summary>
        /// 获取私教学生分页列表
        /// </summary>
        Task<PageResult<CoacherStudentDto>> GetCoacherStudentPageList(CoacherStudentPageRequestDto request);

        /// <summary>
        /// 获取私教学生记录列表
        /// </summary>
        Task<PageResult<CoacherStudentRecordDto>> GetCoacherStudentRecordPageList(CoacherStudentRecordPageRequestDto request);

        /// <summary>
        /// 私教学生点名
        /// </summary>
        Task<UnaryResult> CallStudentAsync(CoacherStudentRequestDto request);

        /// <summary>
        /// 私教学生删除
        /// </summary>
        Task<UnaryResult> DeleteStudentAsync(CoacherStudentDelDto request);

        /// <summary>
        /// 私教预约列表
        /// </summary>
        /// <param name="date">日期</param>
        Task<List<CoacherBookGroupDto>> GetCoacherBookingListAsync(DateTimeOffset date);

        /// <summary>
        /// 我的私教预约列表
        /// </summary>
        Task<List<CoacherBookDto>> GetMyCoacherBookingListAsync(MyCoacherBookRequestDto request);

        /// <summary>
        /// 私教预约详情
        /// </summary>
        /// <param name="businessId">业务ID</param>
        Task<CoacherBookGroupDto> GetCoacherBookingAsync(Guid businessId);

        /// <summary>
        /// 私教预约增加
        /// </summary>
        Task<UnaryResult> AddCoacherBookingAsync(CoacherBookAddDto request);

        /// <summary>
        /// 私教预约更新
        /// </summary>
        Task<UnaryResult> UpdateCoacherBookingAsync(CoacherBookUpdateDto request);

        /// <summary>
        /// 私教预约状态更新
        /// </summary>
        Task<UnaryResult> UpdateCoacherBookingStateAsync(CoacherBookStateUpdateDto request);
    }
}
